07. 字符串
字符串和文本
编程不仅涉及数字和算术,有时还需要处理文本。为了在 Python 中使用文本,我们需要借助于
string
(字符串),它表示一个字符的序列。字符串是文本的一种呈现类型。
注意: 如果大家之前编写过代码,那么可能对字符串的概念并不陌生。但除非你非常了解 Python 的字符串,否则仍需要仔细学习这一部分课程,因为在不同的编程语言中,字符串运行的规则也不相同。
我们可以使用引号创建一个字符串,单引号或双引号均可。
>>> print("hello") #used double-quotes here
hello
>>> print ('hello') #used single-quotes on this one
hello
在上面这个例子中,我分别使用了单引号和双引号来打印字符串
"hello"
,并且都得到了输出
hello
。
我们可以采用与数字相同的方式将变量设置为一个字符串。字符串可以包括任何字符,甚至是空格、标点符号和数字。
>>> welcome_message = "Hello, welcome to Udacity!"
>>> print(welcome_message)
Hello, welcome to Udacity!
尽管字符串不是数字,但有一些适用于整数和浮点数的运算也同样适用于字符串。例如,我们可以使用
+
来将字符串放在一起,这被称为
连接
字符串。
>>> instructor_1 = "Philip"
>>> instructor_2 = "Charlie"
>>> print(instructor_1 + instructor_2)
PhilipCharlie
在上面这个例子中,有两个储存导师姓名的变量。我们使用
+
将两个字符串连接在一起并打印,但这与数字的加法有本质区别。
但你还需要注意的是,我们在这里打印出的两个姓名连在一起,中间没有空格。在使用字符串时,Python 将完全遵循字面形式。因此,如果你希望你编写的内容具有意义,就需要在代码内明确添加空格和标点符号。
>>> instructor_1 = "Philip"
>>> instructor_2 = "Charlie"
>>> print(instructor_1 + " and " + instructor_2)
Philip and Charlie
这次我们得到了一个有意义的字符串,成功将两位导师的姓名连在一起。请注意,中间加入的字符串
and
前后都有一个空格,以便留出适当的间距。
这样看来,使用
+
运行字符串似乎可行。现在我们来试试另一个数学运算:
>>> print(instructor_1 / instructor_2)
TypeError: unsupported operand type(s) for /: 'str' and 'str'
请注意,这里出现了一种新错误!运算符
/
不适用于字符串 (
str
) 类型。这样可再好不过了,因为我不想看到两个导师相除时出现混乱的场面!
引号中的引号
使用引号来定义字符串将会导致一个问题:我们该如何定义一个含有引号的字符串?下面这行代码无法运行,因为字符串本身含有一个引号:
pet_halibut = "Why should I be tarred with the epithet "loony" merely because I have a pet halibut?"
Python 为这个问题提供了两个解决方案。一是将字符串放在单引号 (
'
),而不使用双引号 (
"
) ,如下所示:
pet_halibut = 'Why should I be tarred with the epithet "loony" merely because I have a pet halibut?'
大家也可以使用另一种类型的引号来定义字符串。但有时候我们也需要定义一个同时包含单引号和双引号的字符串,那应该怎么办呢?在出现这种情况时,我们可以使用一个反斜杠
\
来转义引号。例如:
salesman = '"I think you\'re an encyclopaedia salesman"'
在这个例子里,我们在定义字符串时使用了单引号,同时在字符串中的单引号前加上了一个反斜杠,因此 Python 知道应该将这个单引号解释为字符串的一部分,而不是结束字符串的引号。
练习:修复引号
在下方练习的代码中,由于引号使用不当导致了语法错误。请你使用“测试答案”来运行代码,查看错误信息,并为变量
messiah
选择正确的引号来修改这个错误。
Start Quiz:
# TODO: Fix this string!
ford_quote = 'Whether you think you can, or you think you can't--you're right.'
答案:
- 双引号解决方案:
ford_quote = "Whether you think you can, or you think you can't--you're right."
- 反斜杠解决方案:
ford_quote = 'Whether you think you can, or you think you can\'t--you\'re right.'
数字字符串
SOLUTION:
3415(并且 Tropical_fruit_count 是一个字符串)练习:编写服务器日志信息
在下面这个编程练习中,大家将使用我们刚刚学习的关于字符串的内容来编写服务器日志信息。
我们将为大家提供用户的示例数据、访问时间和访问的网站。你们应该使用所提供的变量和所学技巧打印如下所示的日志消息(用相应变量的值替换用户名、url 和时间):
Yogesh accessed the site http://petshop.com/pets/reptiles/pythons at 16:20.
在编写代码时,你可以随时使用“测试答案”按钮查看代码的运行结果。
Start Quiz:
username = "Kinari"
timestamp = "04:50"
url = "http://petshop.com/pets/mammals/cats"
# TODO: print a log message incorporating the strings above.
# The message should be use the same format as this one:
# "Yogesh accessed the site http://petshop.com/pets/reptiles/pythons at 16:20."
答案:
message = username + " accessed the site " + url + " at " + timestamp + "."
print(message)